package com.itwarcraft.lite.base;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 通用配置内容接口类
 * 配置总体的开发模式
 * @author:itwarcraft@gmail.com
 * @time : 2013-12-21 13:10
 */
@SuppressWarnings("rawtypes")
public abstract class AbstractConfig<C extends AbstractConfig>{

	protected boolean _devMode = true;
	protected final Map<String,IPlugin> _plugins = new HashMap<String,IPlugin>();
	protected final List<Handler> _handlers = new ArrayList<Handler>();
	
	/**
	 * 配置系统的开发模式
	 */
	@SuppressWarnings("unchecked")
	public C setDevMode(boolean devMode){
		this._devMode = devMode;
		return (C)this;
	}

	/**
	 * 获得系统的运行模式：开发模式，还是运行模式
	 */
	public boolean getDevMode(boolean devMode){
		return this._devMode;
	}

	/**
	 * 默认实现上，是以类名作为键值保存在MAP中的
	 * @param plugin
	 * @return
	 */
	public C addPlugin(IPlugin plugin){
		return this.addPlugin(plugin.getClass().getName(), plugin);
	}
	/**
	 * 添加插件
	 */
	@SuppressWarnings("unchecked")
	public C addPlugin(String name,IPlugin plugin){
		this._plugins.put(name, plugin);
		return (C)this;
	}
	/**
	 * 获取插件
	 */
	public IPlugin getPlugin(String name){
		return this._plugins.get(name);
	}
	
	public IPlugin getPlugin(Class clasz){
		return this.getPlugin(clasz.getName());
	}

	@SuppressWarnings("unchecked")
	public C addPlugins(List<IPlugin> plugins){
		for(IPlugin plugin : plugins)
			this._plugins.put(plugin.getClass().getName(), plugin);
		return (C)this;
	}
	
	/**
	 * 添加所有的插件
	 * @param plugins
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public C addPlugins(Map<String,IPlugin> plugins){
		this._plugins.putAll(plugins);
		return (C)this;
	}
	
	
	@SuppressWarnings("unchecked")
	public C addHandler(Handler handler){
		this._handlers.add(handler);
		return (C)this;
	}
	
	public List<Handler> getHandlers(){
		List<Handler> result = new ArrayList<Handler>();
		result.addAll(this._handlers);
		return result;
	}



}